package commande;

import librairies.liste.interfaces.IListeE;

import commande.interfaces.ILien;
import commande.os.linux.LienLinux;
import commande.os.windows.LienWindows;

import enumeration.type.ETypeFichier;

/**
 * permet de connaitre les liens de l'os
 * 
 * @author mlozach
 */
public class Lien 
{
	private static Lien instance;
	
	private String name;
	private ILien lien;
	
	/**
	 * pour le singleton
	 */
	public static Lien getInstance() 
	{
		if (instance == null) instance = new Lien();
		return instance;
	}
	
	private Lien() 
	{
		this.name = System.getProperty ("os.name");
		
		if(this.name.contains("Linux"))
		{
			this.lien = new LienLinux();
		}
		else if(this.name.contains("Windows"))
		{
			this.lien = new LienWindows();
		}
		else if(this.name.contains("Android"))
		{
			this.lien = new LienWindows();
		}
	}
	
	/**
	 * permet de recuperer le dossier des fichier properties
	 * @return le String du lien
	 */
	public String getDossierProperties()
	{
		if(this.lien != null)
		{
			return this.lien.getLienProperties();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * permet de recuperer le dossier des fichier xml
	 * @return le String du lien
	 */
	public String getDossierxml()
	{
		if(this.lien != null)
		{
			return this.lien.getLienXml();
		}
		else
		{
			return null;
		}
	}
		
	/**
	 * permet de recuperer le dossier des fichier test
	 * @return le String du lien
	 */
	public String getDossierDico()
	{
		if(this.lien != null)
		{
			return this.lien.getLienDico();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * permet de recuperer le separateur des liens
	 * @return le String du separateur
	 */
	public String getSlash()
	{
		if(this.lien != null)
		{
			return this.lien.getSlash();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * permet de recuperer la list des racines potentielles
	 * @return la list des liens
	 */
	public IListeE<String> getRacinePotentielle()
	{
		if(this.lien != null)
		{
			return this.lien.getRacinePotentielle();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * permet de savoir si le lien est possible
	 * @param le string du lien
	 * @return vrai si le lien exist
	 */
	public boolean isLien(String value)
	{
		if(this.lien != null)
		{
			return this.lien.isLien(value);
		}
		else
		{
			return false;
		}
	}
	
	/**
	 * permet de savoir si le lien est possible
	 * @param le string du lien
	 * @return vrai si le lien exist
	 */
	public String racine()
	{
		if(this.lien != null)
		{
			return this.lien.getRacine();
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * permet de donner le lien racine d'un type de fichier
	 * @param type le type de fichier.
	 * @return la racine du dossier.
	 */
	public String getLienDossier(ETypeFichier type) 
	{
		if(type == null) return null;
		
		switch(type) 
		{
			case AUTRE:
				return this.lien.getValeurOs("lien.dossier.autre");
			case FACTURE:
				return this.lien.getValeurOs("lien.dossier.document");
			case JEUX:
				return this.lien.getValeurOs("lien.dossier.document");
			case MUSIQUE:
				return this.lien.getValeurOs("lien.dossier.musique");
			case PHOTO:
				return this.lien.getValeurOs("lien.dossier.image");
			case TEXTE:
				return this.lien.getValeurOs("lien.dossier.document");
			case VIDEO:
				return this.lien.getValeurOs("lien.dossier.video");	
		}
		
		return null;
	}
}